package com.fingard.dsp.tcpserver;

import com.fingard.FGBiz;
import com.fingard.constant.Format;
import com.fingard.dsp.bankset.BankFront;
import com.fingard.io.FileHelper;
import com.fingard.text.StringHelper;
import com.fingard.util.ZipHelper;

import java.io.File;
import java.util.Date;

/**
 * 回单上传推送任务
 */
public class ThreadReceipt implements Runnable{

    public static final StringBuilder sbLog=new StringBuilder();
    public BankFront bankFront;

    public ThreadReceipt(BankFront bankFront){
        this.bankFront=bankFront;
    }

    @Override
    public void run() {
        try{
            //1、检验配置项
            if (StringHelper.isNullOrEmpty(FGBiz.dspCenter.dspSet.receiptLocalDir)) {
                WriteBankLogLn("未配置receiptLocalDir");
                return;
            }
            if (StringHelper.isNullOrEmpty(FGBiz.dspCenter.dspSet.receiptFileSave)) {
                WriteBankLogLn("未配置receiptFileSave");
                return;
            }
            //一、获取回单
            //2、获取全部待上传的回单压缩文件（提供一个上传至共享目录的公共方法）
            File zipReceiptFile=new File(FGBiz.dspCenter.dspSet.receiptLocalDir);
            //3、解压全部回单压缩文件至配置目录中
            if(zipReceiptFile.listFiles().length>0){
                for(File zipFile:zipReceiptFile.listFiles()){
                    if(zipFile.getName().contains(".zip")){
                        //解压回单文件
                        ZipHelper.unzipFile(zipFile.getPath(), FGBiz.dspCenter.dspSet.receiptFileSave);
                    }
                }
            }
            //4、获取unzipFileSave配置目录中的全部文件
            File receiptFile=new File(FGBiz.dspCenter.dspSet.receiptFileSave);
            //二、上传回单
            //5、通过线程池上传回单文件
            // （1）未上传，开始上传，上传成功状态变更：已上传，删除文件；上传失败，不处理等待下一次循环重新上传
            // （2）已上传，删除文件。
            //6、线程池处理完成，返回上传成功待推送回单信息列表
            //三、推送回单
            //7、判断是否需要推送ats
            //（1）不推送，结束
            //（2）推送，2.1 拼接回单信息为json串，添加到jsonList中；json已实体类的形式
            // 2.2 获取jsonList，分批推送至ats，推送成功，状态变更为：已推送；推送失败，记录json信息重新推送。
            String tmpLogFile = FGBiz.dspCenter.bankLogsDirPath + File.separator + "ReceiptTaskLogs/1111.txt";
            FileHelper.appendFile(tmpLogFile, getLog(), FGBiz.dspCenter.charset);
        } catch (Exception e) {
            FGBiz.limitMsg.exception("回单上传推送任务运行异常：", e);
        }
    }

    /** 日志输入 */
    private void WriteBankLogLn(String log){
        sbLog.append(Format.DateTimeSSSFormat.format(new Date()) + " " + log+"\r\n");
    }

    /** 日志输出 */
    private String getLog(){
        return sbLog.append("\r\n").toString();
    }
}
